# Лекция: Обработка исключений в Java

Исключения в Java - это события, которые нарушают обычный поток выполнения программы. Исключения могут возникать по различным причинам, например, из-за неверных входных данных, отсутствия файла, деления на ноль и т.д.

Java предоставляет мощный механизм обработки исключений, который позволяет управлять ошибками и исключениями во время выполнения программы.

## Блок try-catch

Блок `try-catch` используется для обработки исключений. Код, который может вызвать исключение, помещается в блок `try`, а обработка исключения производится в блоке `catch`.

```java
try {
    // код, который может вызвать исключение
} catch (типИсключения имяПеременной) {
    // код для обработки исключения
}
```

## Оператор throw

Оператор `throw` используется для создания исключения и передачи его обработчику исключений.

```java
throw new Исключение("Сообщение об ошибке");
```

## Оператор finally

Оператор `finally` используется для выполнения кода, независимо от того, было ли исключение или нет. Блок `finally` следует за блоками `try` и/или `catch`.

```java
try {
    // код, который может вызвать исключение
} catch (типИсключения имяПеременной) {
    // код для обработки исключения
} finally {
    // код, который выполняется независимо от того, было ли исключение или нет
}
```

---

# Практические задания

1. **Создайте метод, который делит два числа и обрабатывает исключение при делении на ноль.** (Сложность: 1/5)
```java
void divide(int a, int b) {
    try {
        System.out.println(a / b);
    } catch (ArithmeticException e) {
        System.out.println("Деление на ноль невозможно");
    }
}
```

2. **Создайте метод, который обращается к элементу массива по индексу и обрабатывает исключение при обращении к несуществующему индексу.** (Сложность: 2/5)
```java
void printArrayElement(int[] array, int index) {
    try {
        System.out.println(array[index]);
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("Неверный индекс массива");
    }
}
```

3. **Создайте метод, который преобразует строку в число и обрабатывает исключение, если преобразование невозможно.** (Сложность: 2/5)
```java
void parseNumber(String str) {
    try {
        int number = Integer.parseInt(str);
        System.out.println(number);
    } catch (NumberFormatException e) {
        System.out.println("Невозможно преобразовать строку в число");
    }
}
```

4. **Создайте метод, который открывает файл и обрабатывает исключение, если файл не найден.** (Сложность: 3/5)
```java
void openFile(String filename) {
    try {
        FileReader reader = new FileReader(filename);
    } catch (FileNotFoundException e) {
        System.out.println("Файл не найден");
    }
}
```

5. **Создайте метод, который делит два числа и всегда закрывает ресурс, даже если исключение было вызвано.** (Сложность: 4/5)
```java
void divideWithResource(int a, int b) {
    AutoCloseable resource = getResource();
    try {
        System.out.println(a / b);
    } catch (ArithmeticException e) {
        System.out.println("Деление на ноль невозможно");
    } finally {
        try {
            resource.close();
        } catch (Exception e) {
            System.out.println("Не удалось закрыть ресурс");
        }
    }
}
```